home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / lib / c / crt / ds3100.md / RCS / setjmp.s,v < prev   
Text File  |  1990-06-27  |  4KB  |  225 lines

  1. head     1.3;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @@;
  7.  
  8.  
  9. 1.3
  10. date     90.06.26.21.28.19;  author jhh;  state Exp;
  11. branches ;
  12. next     1.2;
  13.  
  14. 1.2
  15. date     90.02.14.14.55.05;  author jhh;  state Exp;
  16. branches ;
  17. next     1.1;
  18.  
  19. 1.1
  20. date     90.02.14.14.46.21;  author jhh;  state Exp;
  21. branches ;
  22. next     ;
  23.  
  24.  
  25. desc
  26. @@
  27.  
  28.  
  29. 1.3
  30. log
  31. @defined _setjmp and _longjmp
  32. @
  33. text
  34. @/*
  35.  * setjmp.s --
  36.  *
  37.  *      Source code for the setjmp and longjmp library calls.
  38.  *
  39.  * Copyright (C) 1989 by Digital Equipment Corporation, Maynard MA
  40.  *
  41.  *                      All Rights Reserved
  42.  *
  43.  * Permission to use, copy, modify, and distribute this software and its 
  44.  * documentation for any purpose and without fee is hereby granted, 
  45.  * provided that the above copyright notice appear in all copies and that
  46.  * both that copyright notice and this permission notice appear in 
  47.  * supporting documentation, and that the name of Digital not be
  48.  * used in advertising or publicity pertaining to distribution of the
  49.  * software without specific, written prior permission.  
  50.  *
  51.  * Digitial disclaims all warranties with regard to this software, including
  52.  * all implied warranties of merchantability and fitness.  In no event shall
  53.  * Digital be liable for any special, indirect or consequential damages or
  54.  * any damages whatsoever resulting from loss of use, data or profits,
  55.  * whether in an action of contract, negligence or other tortious action,
  56.  * arising out of or in connection with the use or performance of this
  57.  * software.
  58.  *
  59.  * Header: Sync_GetLock.s,v 1.1 88/06/19 14:34:17 ouster Exp $ SPRITE (DECWRL)
  60.  */
  61.  
  62. #ifdef KERNEL
  63. #include <regdef.h>
  64. #else
  65. #include <regdef.h>
  66. #endif
  67.  
  68. /*
  69.  * ----------------------------------------------------------------------------
  70.  *
  71.  * setjmp --
  72.  *
  73.  *      Perform a setjmp operation.
  74.  *
  75.  * Results:
  76.  *      Always returns 0.
  77.  *
  78.  * Side effects:
  79.  *      The state of the world is stored away.
  80.  *
  81.  * C equivalent:
  82.  *
  83.  *      int setjmp(env)
  84.  *    jmp_buf    env;
  85.  *
  86.  *----------------------------------------------------------------------
  87.  */
  88.     .globl setjmp
  89.     .globl _setjmp
  90. setjmp:
  91.     subu    sp, sp, 32
  92.     sw        ra, 28(sp)
  93.     sw        a0, 24(sp)
  94.     add        a0, zero, zero        # Get current signal mask.
  95.     jal        sigblock
  96.     lw        a0, 24(sp)
  97.     lw        ra, 28(sp)
  98.     addu    sp, sp, 32
  99. _setjmp:
  100.     sw        zero, 0(a0)        # On sig stack flag = 0
  101.     sw        v0, 4(a0)        # Current signal mask.
  102.     sw        ra, 8(a0)        # Return address.
  103.     sw        gp, 124(a0)
  104.     sw        sp,128(a0)
  105.     sw        s0,76(a0)
  106.     sw        s1,80(a0)
  107.     sw        s2,84(a0)
  108.     sw        s3,88(a0)
  109.     sw        s4,92(a0)
  110.     sw        s5,96(a0)
  111.     sw        s6,100(a0)
  112.     sw        s7,104(a0)
  113.     sw        s8,132(a0)
  114.     swc1       $f20,232(a0)
  115.     swc1       $f21,236(a0)
  116.     swc1       $f22,240(a0)
  117.     swc1       $f23,244(a0)
  118.     swc1       $f24,248(a0)
  119.     swc1       $f25,252(a0)
  120.     swc1       $f26,256(a0)
  121.     swc1       $f27,260(a0)
  122.     swc1       $f28,264(a0)
  123.     swc1       $f29,268(a0)
  124.     swc1       $f30,272(a0)
  125.     swc1       $f31,276(a0)
  126.     cfc1    v0, $31
  127.     sw        v0, 280(a0)
  128.     add        v0, zero, zero
  129.     j        ra
  130.  
  131. /*
  132.  * ----------------------------------------------------------------------------
  133.  *
  134.  * longjmp --
  135.  *
  136.  *      Perform a longjmp operation.
  137.  *
  138.  * Results:
  139.  *      Returns val.
  140.  *
  141.  * Side effects:
  142.  *      State of the world is restored.
  143.  *
  144.  * C equivalent:
  145.  *
  146.  *      int longjmp(env, val)
  147.  *    jmp_buf    env;
  148.  *    int val;
  149.  *
  150.  *----------------------------------------------------------------------
  151.  */
  152.     .globl longjmp
  153.     .globl _longjmp
  154. longjmp:
  155.     subu    sp, sp, 32
  156.     sw        a0, 24(sp)
  157.     sw        a1, 28(sp)
  158.  
  159.     lw        a0, 4(a0)
  160.     jal        sigsetmask
  161.  
  162.     lw        a0, 24(sp)
  163.     lw        a1, 28(sp)
  164. _longjmp:
  165.     lw        ra, 8(a0)
  166.     lw        gp, 124(a0)
  167.     lw        sp,128(a0)
  168.     lw        s0,76(a0)
  169.     lw        s1,80(a0)
  170.     lw        s2,84(a0)
  171.     lw        s3,88(a0)
  172.     lw        s4,92(a0)
  173.     lw        s5,96(a0)
  174.     lw        s6,100(a0)
  175.     lw        s7,104(a0)
  176.     lw        s8,132(a0)
  177.     lwc1       $f20,232(a0)
  178.     lwc1       $f21,236(a0)
  179.     lwc1       $f22,240(a0)
  180.     lwc1       $f23,244(a0)
  181.     lwc1       $f24,248(a0)
  182.     lwc1       $f25,252(a0)
  183.     lwc1       $f26,256(a0)
  184.     lwc1       $f27,260(a0)
  185.     lwc1       $f28,264(a0)
  186.     lwc1       $f29,268(a0)
  187.     lwc1       $f30,272(a0)
  188.     lwc1       $f31,276(a0)
  189.     lw        v0, 280(a0)
  190.     ctc1    v0, $31
  191.  
  192.     add        v0, a1, zero
  193.     bne        v0, zero, 1f
  194.     li        v0, 1
  195. 1:  j        ra
  196.  
  197. @
  198.  
  199.  
  200. 1.2
  201. log
  202. @called sigblock instead of sigsetmask
  203. @
  204. text
  205. @d56 1
  206. d66 1
  207. a66 1
  208.  
  209. d120 1
  210. d131 1
  211. a131 1
  212.  
  213. @
  214.  
  215.  
  216. 1.1
  217. log
  218. @Initial revision
  219. @
  220. text
  221. @d125 1
  222. a125 1
  223.     jal        sigblock
  224. @
  225.